package com.cib.xagcjs.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * Description: 定时任务管理入口
 * Author: jingcaiqi1225@gmail.com
 * Date: 2024/2/1 8:32
 */
@Component
@Slf4j
public class SchedulerManager {

    @Autowired
    private TaskConfig taskConfig;

    /**
     * 支付结果轮训回传 (10分钟一次轮巡)
     */
    @Async
    @Scheduled(cron = "0 10 * * * *")
    public void sendResult() {
        log.info("执行支付结果轮训回传任务，每小时第10分钟执行一次");
        String result = taskConfig.sendResult();
        if(("ok").equals(result)) {
            log.info("---------QuartzTask定时任务（支付结果轮训回传）执行成功--------");
        } else {
            log.info("---------QuartzTask定时任务（支付结果轮训回传）执行失败--------");
        }
    }

    /**
     * 执行通知状态更改为 3 已支付（3小时执行一次）
     */
    @Async
    @Scheduled(cron = "0 0 */3 * * *")
    public void updateNotify() {
        log.info("执行通知状态更改为 3 已支付，每30秒执行一次");
        String result = taskConfig.updateNotify();
        if(("ok").equals(result)) {
            log.info("---------QuartzTask定时任务（通知状态更改为 3 已支付）执行成功--------");
        } else {
            log.info("---------QuartzTask定时任务（通知状态更改为 3 已支付）执行失败--------");
        }
    }

    /**
     * 执行数币支付结果回传（每小时第三十分钟执行一次）
     */
    @Async
    @Scheduled(cron = "30 * * * * *")
    public void sendEcnyResult() {
        log.info("执行数币支付结果回传（每小时第三十分钟执行一次）");
        String result = taskConfig.sendEcnyResult();
        if(("ok").equals(result)) {
            log.info("---------QuartzTask定时任务（数币支付结果回传）执行成功--------");
        } else {
            log.info("---------QuartzTask定时任务（数币支付结果回传）执行失败--------");
        }
    }

    /**
     * 数币冻结结果通知（每小时第三十分钟执行一次）
     */
    @Async
    @Scheduled(cron = "40 * * * * *")
    public void sendEcnyLockResult() {
        log.info("执行数币冻结结果通知（每小时第四十分钟执行一次）");
        String result = taskConfig.sendEcnyLockResult();
        if(("ok").equals(result)) {
            log.info("---------QuartzTask定时任务（数币冻结结果通知）执行成功--------");
        } else {
            log.info("---------QuartzTask定时任务（数币冻结结果通知）执行失败--------");
        }
    }

    /**
     * 执行数币解冻结果通知（每小时第三十分钟执行一次）
     */
    @Async
    @Scheduled(cron = "50 * * * * *")
    public void sendEcnyUnLockResult() {
        log.info("执行数币解冻结果通知（每小时第五十分钟执行一次）");
        String result = taskConfig.sendEcnyUnLockResult();
        if(("ok").equals(result)) {
            log.info("---------QuartzTask定时任务（数币解冻结果通知）执行成功--------");
        } else {
            log.info("---------QuartzTask定时任务（数币解冻结果通知）执行失败--------");
        }
    }
}
